#ifndef __UIHOTKEY_H__
#define __UIHOTKEY_H__
#pragma once

namespace DuiLib{
    class CHotKeyUI;

    class UILIB_API CHotKeyWnd : public CWindowWnd
    {
    public:
        CHotKeyWnd(void);

    public:
        void Init(CHotKeyUI * pOwner);
        RECT CalPos();
        LPCTSTR GetWindowClassName() const;
        void OnFinalMessage(HWND hWnd);
        LPCTSTR GetSuperClassName() const;
        LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
        LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
        LRESULT OnEditChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    public:
        void SetHotKey(WORD wVirtualKeyCode, WORD wModifiers);
        void GetHotKey(WORD &wVirtualKeyCode, WORD &wModifiers) const;
        DWORD GetHotKey(void) const;
        CDuiString GetHotKeyName();
        void SetRules(WORD wInvalidComb, WORD wModifiers);
        CDuiString GetKeyName(UINT vk, BOOL fExtended);
    protected:
        CHotKeyUI * m_pOwner;
        HBRUSH m_hBkBrush;
        bool m_bInit;
    };

    class UILIB_API CHotKeyUI : public CLabelUI
    {
        DECLARE_DUICONTROL(CHotKeyUI)
        friend CHotKeyWnd;
    public:
        CHotKeyUI();
        LPCTSTR GetClass() const;
        LPVOID GetInterface(LPCTSTR pstrName);
        UINT GetControlFlags() const;
        void SetEnabled(bool bEnable = true);
        void SetText(LPCTSTR pstrText);
        LPCTSTR GetNormalImage();
        void SetNormalImage(LPCTSTR pStrImage);
        LPCTSTR GetHotImage();
        void SetHotImage(LPCTSTR pStrImage);
        LPCTSTR GetFocusedImage();
        void SetFocusedImage(LPCTSTR pStrImage);
        LPCTSTR GetDisabledImage();
        void SetDisabledImage(LPCTSTR pStrImage);
        void SetNativeBkColor(DWORD dwBkColor);
        DWORD GetNativeBkColor() const;

        void SetPos(RECT rc);
        void SetVisible(bool bVisible = true);
        void SetInternVisible(bool bVisible = true);
        SIZE EstimateSize(SIZE szAvailable);
        void DoEvent(TEventUI& event);
        void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);

        void PaintStatusImage(HDC hDC);
        void PaintText(HDC hDC);
    public:
        void GetHotKey(WORD &wVirtualKeyCode, WORD &wModifiers) const;
        DWORD GetHotKey(void) const;
        void SetHotKey(WORD wVirtualKeyCode, WORD wModifiers);

    protected:
        CHotKeyWnd * m_pWindow;
        UINT m_uButtonState;
        CDuiString m_sNormalImage;
        CDuiString m_sHotImage;
        CDuiString m_sFocusedImage;
        CDuiString m_sDisabledImage;
        DWORD m_dwHotKeybkColor;

    protected:
        WORD m_wVirtualKeyCode;
        WORD m_wModifiers;
    };
}


#endif